什么是BGP?邊界網關協議 (BGP) 就是互聯網的郵政服務。當有人把一封信投進郵筒時,郵政服務就會處理這封郵件,并選擇一條快速、高效的路線將這封信投遞給收件人。同樣地,當有人通過互聯網提交數據時,BGP 負責尋找數據能傳播的所有可用路徑,并選擇最佳的路由,這通常意味著在自治系統之間跳躍。BGP 是通過啟用數據路由來使互聯網正常工作的協議。當一位在新加坡的用戶加載一個源服務器位于阿根廷的網站時,BGP 就是使這種通信快速、高效地進行的協議。
什么是自治系統?
互聯網是一個由網絡組成的網絡。它由成千上萬個被稱為“自治系統”(autonomous system,AS)的更小網絡組成。這些網絡中的每一個實際上就是由單一組織運行的一個大型路由器池。
如果我們繼續將 BGP 比作互聯網的郵政服務,那么自治系統就相當于各郵政分局。一個城鎮可能有數百個郵箱,但郵箱中的所有郵件都必須先經過本地郵政分局,然后再運送到另一個目的地。自治系統中的內部路由器就好比郵箱。它們將出站流量路由到自治系統,然后使用 BGP 路由將這些流量傳輸到其目的地。
上圖展示了一個簡化版的 BGP。在此版本中,互聯網上只有 6 個自治系統。如果 AS1 需要向 AS3 路由一個數據包,它有兩種不同的選擇:
跳到 AS2,然后跳到 AS3:
AS2 → AS3
或跳到 AS6,然后跳到 AS5,然后是 AS4,最后跳到 AS3:
AS6 → AS5 → AS4 → AS3
在這個簡化的模型中,決策似乎很簡單直接。AS2 路由所需的躍點比 AS6 路由要少,因此它是最快、最高效的路由。現在假設有成百上千個 AS,而且躍點數只是一種復雜的路線選擇算法中的一部分。這就是互聯網上 BGP 路由的實際情況。
互聯網的結構是不斷變化的,新系統不斷出現,現有系統也會變得不可用。因此,每一個自治系統都必須掌握有關新路由和廢棄路由的最新信息。這是通過對等會話完成的,其中,每一個自治系統都會通過 TCP/IP 協議連接到相鄰的自治系統,以共享路由信息。通過這些信息,每個自治系統都能夠正確地路由出站數據。
在這里,我們上面所做的比喻不再成立。與郵局不同,自治系統并非都屬于同一個組織。事實上,它們往往屬于互相競爭的公司。因此,BGP 路由有時會將業務因素考慮在內。自治系統往往會互相收取費用來傳輸通過其網絡的流量,相關價格會成為最終選擇哪條路由的因素。
誰在運營 BGP 自治系統?
自治系統一般屬于互聯網服務提供商(ISP)或其他大型組織,例如科技公司、高校、政府機構和科研機構。每個希望交換路由信息的 AS 都必須具有一個注冊的自治系統編號(ASN)。互聯網號碼分配機構(IANA)向地區互聯網注冊機構(RIR)分配 ASN,后者再將其分配給 ISP 和網絡。ASN 是介于 1 到 65534 之間的 16 位數字,以及介于 131072 和 4294967294 之間的 32 位數字。截至 2018 年,全世界使用中的 ASN 共有大約 6.4 萬個。只有外部 BGP 才需要 ASN。
外部 BGP 與內部 BGP 有什么區別?
在互聯網上,路由交換和流量傳輸是通過外部 BGP(eBGP)進行的。自治系統也可使用 BGP 的內部版本來路由內部網絡上的數據,也就是 iBGP。應該指出的是,使用內部 BGP 并非使用外部 BGP 的前提條件。自治系統可從多種內部協議中選擇,來連接內部網絡上的路由器。
外部 BGP 就像國際運輸。在國際上運送郵件時,需要遵循特定的標準和規則。郵件到達目的地國家后,必須通過目的地國家的本地郵政服務才能達到其最終目的地。每個國家都有自己的內部郵政服務,不必遵循其他國家的相同規則。同樣,每個自治系統都可以有自己的內部路由協議,用于路由自身網絡內部的數據。
BGP 的缺陷以及解決方法
在 2004 年,一家名為 TTNet 的土耳其 ISP 意外地向相鄰的網絡發布了錯誤的 BGP 路由。這些路由聲稱,TTNet 自己是互聯網上所有流量的最佳目的地。隨著這些路由不斷傳播到越來越多的自治系統,發生了一次大規模的中斷,導致持續一天的危機,世界各地很多人都無法訪問部分或全部互聯網。
同樣,在 2008 年,一家巴基斯坦 ISP 嘗試使用一個 BGP 路由來阻止巴基斯坦用戶訪問 YouTube。該 IPS 隨后意外地將這些路由發給了鄰近的自治系統,該路由在互聯網上的 BGP 網絡中迅速傳播開來。這個路由將嘗試訪問 YouTube 的用戶發送到一個無效的目的地,導致 YouTube 數小時內無法訪問。
這些是所謂 BGP 劫持的實例,而這種情況并不總是意外發生的。2018 年 4月,攻擊者故意創建了一個錯誤的 BGP 路由,將原定目的地為亞馬遜 DNS 服務的流量重定向。通過將這些流量重定向給自己,攻擊者成功竊取了價值 10 萬美元的加密貨幣。
這樣的事件之所以會發生,是因為 BGP 的路由共享功能依賴于信任,自治系統隱式信任與它們共享的路由。當對等網絡(有意或無意地)公告不正確的路由信息時,流量就會到達錯誤的目的地,有可能產生惡意的結果。
幸運的是,在保護 BGP 方面已經取得了一些進展。最引人注目的是 2008 年推出的資源公鑰基礎設施(RPKI)的路由安全框架。RPKI 使用被稱為路由源授權(Route Origin Authorization, ROA)的加密簽名記錄,以驗證哪個網絡運營商允許使用 BGP 來公告某個組織的 IP 地址。這確保了獲授權方才能公告某個組織的前綴。
但僅有 RPKI 的存在并不足夠。如果大型網絡未部署 RPKI,就有可能傳播大規模的劫持攻擊。目前,超過 50% 的頂級互聯網服務提供商在某種程度上支持 RPKI,但需要大多數的支持才能完全保障 BGP 的安全。網絡運營商可以通過實施 RPKI來保護其網絡。這個功能可以讓客戶在有未經授權者發布其前綴收到通知,從而預防 BGP 劫持攻擊。